home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / answers / fonts-faq / part6 < prev    next >
Encoding:
Text File  |  1993-06-21  |  22.7 KB  |  441 lines

  1. Path: senator-bedfellow.mit.edu!enterpoop.mit.edu!gatech!howland.reston.ans.net!noc.near.net!nic.umass.edu!ymir.cs.umass.edu!ymir.cs.umass.edu!usenet
  2. From: walsh@cs.umass.edu (Norman Walsh)
  3. Newsgroups: comp.fonts,comp.answers,news.answers
  4. Subject: comp.fonts FAQ.4.OS/2-Info
  5. Followup-To: poster
  6. Date: 21 Jun 1993 13:19:14 GMT
  7. Organization: Dept of Comp and Info Sci, Univ of Mass (Amherst)
  8. Lines: 420
  9. Approved: news-answers-request@MIT.Edu
  10. Distribution: world
  11. Expires: 21 Jul 93 09:21:06 GMT
  12. Message-ID: <fonts-faq-6-740668866@cs.umass.edu>
  13. References: <fonts-faq-1-740668866@cs.umass.edu>
  14. Reply-To: walsh@cs.umass.edu (Norman Walsh)
  15. NNTP-Posting-Host: ibis.cs.umass.edu
  16. Summary: This posting answers frequently asked questions about fonts.
  17.          It addresses both general font questions and questions that
  18.      are specific to a particular platform.
  19. Xref: senator-bedfellow.mit.edu comp.fonts:9144 comp.answers:1072 news.answers:9621
  20.  
  21. Posted-By: auto-faq 2.4
  22. Archive-name: fonts-faq/part6
  23. Version: 1.4.1
  24.  
  25. Subject: Chapter 4 
  26.  
  27.     OS/2 Information
  28.  
  29. Subject: 4.1. OS/2 FAQ Copyright Information 
  30.  
  31.     [ ed: Except as otherwise noted, the entire OS/2 section of the
  32.     comp.fonts FAQ List is derived from the ``Draft OS/2 Font FAQ''
  33.     posted by David J. Birnbaum. ]
  34.  
  35.     This section if the FAQ is Copyright (C) 1993 by David J. Birnbaum.
  36.     All Rights Reserved. Reproduced here by permission.
  37.  
  38.     [ ed: Since this section of the FAQ is wholly derived from David's
  39.     document, some sections contain information repeated elsewhere in
  40.     the comp.fonts FAQ. ]
  41.  
  42.     4.1.1 David Birnbaum's Introduction
  43.  
  44.     4 June 1993
  45.  
  46.     A couple of weeks ago I posted an inquiry to comp.fonts,
  47.     comp.os.os2.misc, and the OS2-L ListServ concerning some apparent
  48.     peculiarities in the way OS/2 handles font files. These
  49.     "peculiarities" actually reflect regular, systematic differences in
  50.     OS/2, Windows, and DOS font handling, which are not conveniently
  51.     described in end-user documentation. This posting is intended to
  52.     spare others some of the confusion I encountered as a result of
  53.     this paradigm shift.
  54.  
  55.     This is the first (draft) distribution of this document and
  56.     corrections and suggestions are welcome. I am grateful to Henry
  57.     Churchyard, Marc L. Cohen, Bur Davis and Kamal Mansour for helpful
  58.     discussions; they are not, of course, responsible for any
  59.     misinterpretation I may have inflicted on their comments.
  60.  
  61. Subject: 4.2. Preliminaries 
  62.  
  63.     Character: an informational unit consisting of a value (usually a
  64.     byte) and roughly corresponding to what we think of as letters,
  65.     numbers, punctuation, etc.
  66.  
  67.     Glyph: a presentational unit corresponding roughly to what we think
  68.     of as letters, numbers, punctuation, etc.
  69.  
  70.     Character vs glyph: Glyph and character are not necessarily the
  71.     same; the character <a> may be mapped to a Times Roman Lower Case
  72.     <a> glyph in one font and to a Helvetica Lower Case <a> glyph in
  73.     another font. Change of glyphs normally means a change in style of
  74.     presentation, while change in characters normally means a change in
  75.     information. There are gray areas and the definitions provided
  76.     above are general, approximate, and imprecise.
  77.  
  78.     Character set: an inventory of characters with certain assigned
  79.     values. ASCII is a 7-bit character set that specifies which
  80.     "character cell" (byte value) corresponds to which informational
  81.     unit.
  82.  
  83.     Code Page: essentially synonymous with character set.
  84.  
  85.     Font: A collection of glyphs. A specific font may be isomorphic
  86.     with a specific character set, containing only glyphs corresponding
  87.     to characters in that set, with these glyphs mapped to the same
  88.     byte values as the characters they are intended to represent.
  89.     PostScript fonts often contain additional (unmapped) characters.
  90.     Most importantly, PostScript fonts may sometimes be remapped by an
  91.     operating environment, which is what leads to the disorienting
  92.     cross-environment mismatch that spurred my original posting.
  93.  
  94.     Fonts may be bitmapped or outline in format; a bitmapped format
  95.     corresponds to a particular size and weight for a particular device
  96.     or device resolution, while a single outline font is used to
  97.     generate multiple sizes as needed. Within an outline font system,
  98.     different weights (bold, semibold, italic, etc.) may be encoded as
  99.     separate font resources (separate outline files used to generate
  100.     the glyphs) or may all be generated from a single outline (slanting
  101.     characters to make "italics," fattening them for "bold," etc.).
  102.  
  103. Subject: 4.3. Fonts Under Dos 
  104.  
  105.     I used a large assortment of fonts under DOS for intricate
  106.     multilingual work. My setup at that time consisted of a library of
  107.     bitmapped fonts that could be sent to my HP LaserJet II printer, as
  108.     well as a set of fixed-size, fixed-width screen fonts that were
  109.     supported by my Hercules Graphics Card Plus (not the same as
  110.     Hercules Graphics; the "Plus" included an ability to store 3072
  111.     screen glyphs and display any of these together, while standard
  112.     character-mode displays were normally limited to 256 or 512 such
  113.     entities).
  114.  
  115.     Using XyWrite as a word processor, I would enter a "Mode" command
  116.     to change fonts and character sets simultaneously; this would make
  117.     different sets of screen glyphs available at the keyboard and would
  118.     insert a font-change command for my printer into the text stream.
  119.     The "Mode" and font-change commands were not displayed on the
  120.     screen. The result was not WYSIWYG, since I was limited to
  121.     fixed-width screen display and since I had far more printer glyphs
  122.     available than the 3072 limit imposed by my video card; I used a
  123.     brightness attribute to indicate bold, I used the same screen font
  124.     for different sizes of printer fonts, etc. This worked and worked
  125.     well, in that I could see (for example) Russian, Greek, English,
  126.     Polish, and other characters simultaneously on the screen and I
  127.     could print documents combining them.
  128.  
  129.     Architecturally, what was going on was that the character sets
  130.     (code pages) and fonts were entirely isomorphic and were hard-
  131.     coded. If I put a particular Russian letter into cell 246 of my
  132.     screen and printer fonts, that character was always there, and any
  133.     strategy that would let me access this cell (remapped keyboards,
  134.     numeric keypad) was guaranteed always to find the same character.
  135.  
  136. Subject: 4.4. Windows 
  137.  
  138.     I recently began using PostScript fonts in Windows with AmiPro as
  139.     my word processor. These fonts came with printed cards indicating
  140.     the glyph mappings; I could look at the card and it would tell me
  141.     that a specific character lived in cell 246, and if I entered
  142.     Alt-0246 at the numeric keypad that glyph would appear on the
  143.     screen. If I loaded the font into Fontographer for Windows, these
  144.     glyphs would be arrayed in cells according to the map provided by
  145.     Adobe with the fonts. Fontographer also revealed that these fonts
  146.     had other, "unmapped" glyphs assigned to cells above 255.
  147.  
  148.     Given what appeared to be a hard correspondence among what I saw in
  149.     Fontographer, what was printed in Adobe's maps, and what was
  150.     displayed when I entered something at the keyboard, I naively
  151.     assumed that PostScript fonts were operating much like my bitmapped
  152.     fonts under DOS. There were some obvious differences, the primary
  153.     one being that glyphs of different sizes were all drawn from the
  154.     same font resource files under PostScript, but it appeared as if a
  155.     glyph lived in a certain cell.
  156.  
  157. Subject: 4.5. Differences between Windows and OS/2 
  158.  
  159.     This assumption was incorrect; PostScript fonts can be subdivided
  160.     into two types, one of which observes hard and invariant encodings
  161.     similar to those that apply to my bitmapped fonts, while the other
  162.     represents a completely different font mapping strategy. This
  163.     difference became apparent only when I attempted to share
  164.     PostScript fonts between Windows and OS/2 and got some unexpected
  165.     results.
  166.  
  167.     A PostScript font under Windows involves two files, a PFB
  168.     (PostScript Font Binary) file, which contains the PostScript
  169.     instructions needed to draw each glyph and some mapping
  170.     information, and a PFM (Printer Font Metrics) file, which encodes
  171.     width and kerning information. A PostScript font under OS/2 also
  172.     uses the same PFB file, but instead of the PFM file it uses an AFM
  173.     (Adobe Font Metrics) file. The AFM and PFM files contain much of
  174.     the same basic information (although the AFM file is somewhat more
  175.     complete); the most important differences are in format (AFM is
  176.     plain text, PFM is binary) and use (OS/2 uses AFM, Windows uses
  177.     PFM).
  178.  
  179. Subject: 4.6. Installation under Windows and Win-OS/2 
  180.  
  181.     The OS/2 2.0 Font Palette tool (see below for changes to be
  182.     introduced with 2.1) by default installs fonts (both PFB and AFM
  183.     files) into the "\os2\dll" directory. Win-OS/2 by default
  184.     installs PFB files into "\psfonts" and PFM files into "\psfonts
  185.     \pfm". These defaults can be changed; since OS/2 and Win-OS/2 use
  186.     the same PFB files, the user can save disk space by allowing these
  187.     to be shared (through installing into the same directory, e.g.,
  188.     install OS/2 fonts into the "\psfonts" directory instead of "\
  189.     os2\dll".) Note that fonts must be intalled and removed through
  190.     the Font Palette; if you copy, move, or delete a font file without
  191.     using the Font Palette, the system configuration files are not
  192.     updated and all hell breaks loose.
  193.  
  194.     Deleting fonts from Win-OS/2 causes the system to update the
  195.     win.ini file to remove references to the font, but does not delete
  196.     any files physically. Deleting fonts from the OS/2 Font Palette
  197.     updates the os2.ini configuration file _and_ physically deletes the
  198.     AFM and PFB files from the disk. This means that if you are sharing
  199.     PFB files between OS/2 and Win-OS/2, you can delete a Win-OS/2 font
  200.     without hurting native OS/2 operations, since the PFB reamins
  201.     installed where OS/2 thinks it is. But if you delete an OS/2 font
  202.     using the Font Palette, the PFB file is erased from the disk even
  203.     though the win.ini file is not updated, so that Win-OS/2 thinks it
  204.     is still there.
  205.  
  206. Subject: 4.7. FontSpecific PostScript Encoding 
  207.  
  208.     Every PFB file contains an "encoding vector"; this is a plain text
  209.     line embedded near the head of the PFB file. Encoding vectors are
  210.     of two types: AdobeStandardEncoding and everything else. Adobe
  211.     usually uses the label "FontSpecific" for fonts that are not
  212.     encoded according to AdobeStandardEncoding, and I use it as a cover
  213.     term here for any such font.
  214.  
  215.     If you look at the readable plain text information at the head of a
  216.     FontSpecific type font, it includes a range of text that begins:
  217.  
  218.           /Encoding 256 array
  219.  
  220.     followed by a bunch of lines, each of which includes a number
  221.     (which corresponds to a cell in the font layout) and the name of
  222.     the glyph that lives in that cell. The unreadable binary data below
  223.     this array specification lists the name of each glyph and the
  224.     PostScript instructions for how the glyph is to be drawn. There may
  225.     be PostScript code for drawing glyphs that are not included in the
  226.     mapping array, but only glyphs mentioned in the array specification
  227.     are available to applications.
  228.  
  229.     FontSpecific type fonts _are_ comparable to the bitmapped fonts I
  230.     used under DOS. Each character physically is assigned to a specific
  231.     cell within the font file and operating environments are not
  232.     allowed to remap these. The glyph in cell 246 will be the same in
  233.     both Windows and OS/2.
  234.  
  235. Subject: 4.8. AdobeStandardEncoding 
  236.  
  237.     AdobeStandardEncoding is a specific mapping of certain glyphs to
  238.     certain cells; in this respect it resembles FontSpecific encoding.
  239.     Because it is standardized, the array is not spelled out in the PFB
  240.     file; the line
  241.  
  242.           /Encoding StandardEncoding def
  243.  
  244.     tells Adobe Type Manager (ATM, either the Windows and Win-OS/2
  245.     version or the native OS/2 version) that the encoding is
  246.     "standard," and the environments are expected to know what this
  247.     standard is without having the array spelled out in each font file.
  248.  
  249.     Although AdobeStandardEncoding is a real mapping, there is an
  250.     importance difference between it and various FontSpecific mappings:
  251.     operating environments are expected to remap AdobeStandardEncoding
  252.     fonts according to their own requirements. That is, although
  253.     AdobeStandardEncoding does assign glyphs to cells, no operating
  254.     environment actually uses these assignments and any environment
  255.     remaps the glyphs before rendering them. Confusion arises because
  256.     Windows and OS/2 remap such fonts in different ways.
  257.  
  258. Subject: 4.9. AdobeStandardEncoding under Windows (and Win-OS/2) 
  259.  
  260.     An AdobeStandardEncoding font under Windows is remapped according
  261.     to a character map (code page) that MicroSoft calls Windows ANSI
  262.     (can other code pages be installed in Windows?). This determines
  263.     which character resides in which cell and the font is remapped so
  264.     that glyphs and characters will correspond. Since Fontographer for
  265.     Windows is a Windows application, it displays glyphs not in the
  266.     cells in which they live according to AdobeStandardEncoding, but in
  267.     the cells to which they get reassigned under the remapping to
  268.     Windows ANSI. There is nothing explicit in the PFB file that
  269.     associates these characters with the specific cells in which they
  270.     appear under Windows.
  271.  
  272. Subject: 4.10. AdobeStandardEncoding under OS/2 
  273.  
  274.     OS/2 operates within a set of supported code pages; two system-
  275.     wide code pages are specified in the config.sys file and an
  276.     application is allowed to switch the active code page to any
  277.     supported code page (not just these two). DeScribe, for example,
  278.     currently operates in code page (CP) 850, which includes most
  279.     letters needed for western European Latin alphabet writing. CP 850
  280.     does not contain typographic quotes, en- and em-dashes, and other
  281.     useful characters. It does contain the IBM "pseudographics," which
  282.     are useful for drawing boxes and lines with monospaced fonts.
  283.  
  284.     When the user inputs a value (through the regular keyboard or the
  285.     numeric keypad), the application checks the active CP, looks up in
  286.     an internal table the name of the character that lives in that cell
  287.     within that CP, and translates it into a unique number that
  288.     corresponds to one of the 383 glyphs supported by OS/2 (the union
  289.     of all supported code pages). This number is passed to PM-ATM (the
  290.     OS/2 ATM implementation), which translate the glyph number into the
  291.     glyph name that PostScript fonts expect and searches the font for
  292.     that name. The system never looks at where a glyph is assigned
  293.     under the AdobeStandardEncoding array; rather, it scans the font
  294.     looking for the character by name and gives it an assignment
  295.     derived from the active code page. This is the remapping that OS/2
  296.     performs on AdobeStandardEncoding type fonts.
  297.  
  298.     As a result, a situation arises where, for example, <o+diaeresis>
  299.     is mapped to cell 246 under Windows ANSI but to cell 148 under CP
  300.     850. Using the identical PFB file, this glyph is accessed
  301.     differently in the two operating environments.
  302.  
  303. Subject: 4.11. Consequences for OS/2 users 
  304.  
  305.     If your font has a FontSpecific encoding, there are no unexpected
  306.     consequences; the same glyphs will show up at the same locations in
  307.     both Windows (Win-OS/2) and native OS/2. Regardless of what the
  308.     active code page is, if the font has a FontSpecific encoding OS/2
  309.     goes by cell value; a specific glyph is hard-coded to a specific
  310.     cell and OS/2 will give you whatever it finds there, even if what
  311.     it finds disagrees with what the active code page would normally
  312.     predict. In other words, FontSpecific encoding means "ignore the
  313.     mapping of the active code page and rely on the mapping hard-coded
  314.     into the font instead."
  315.  
  316.     If your font has an AdobeStandardEncoding encoding, the following
  317.     details obtain:
  318.  
  319.     1) The same PFB file may have glyphs that are accessible in one
  320.     environment but not another. For example, if DeScribe thinks it is
  321.     operating in CP 850, there is no access to typographic quotes, even
  322.     if those do occur in the PFB file and even if Windows can find them
  323.     in the same exact font file. DeScribe could switch code pages, but
  324.     if the application isn't set up to do so (and DeScribe currently
  325.     isn't), those characters are absolutely inaccessible to the user.
  326.  
  327.     2) If the active code page includes a character that isn't present
  328.     in the font, OS/2 has to improvise. For example,
  329.     AdobeStandardEncoding fonts do not normally include the IBM
  330.     pseudographics, yet the user who inputs the character value for one
  331.     of these sends the system off to look for it. As described above,
  332.     OS/2 first checks the active font for the glyph name that
  333.     corresponds to that character and, if it finds it, displays it. If
  334.     the glyph isn't found, OS/2 looks to the system Symbol font. This
  335.     is not reported back to the user in DeScribe; if I have Adobe
  336.     Minion active (AdobeStandardEncoding, no information anywhere in
  337.     the font files for pseudographics) and input a pseudographic
  338.     character, DeScribe tells me it is still using Adobe Minion, even
  339.     though it has fetched the character it displays and prints from the
  340.     Symbol font, a different font resource file.
  341.  
  342. Subject: 4.12. Advice to the User 
  343.  
  344.     OS/2's code page orientation provides some advantages, in that it
  345.     separates the character set (code page) mapping from the encoded
  346.     font mapping. The main inconvenience isn't a loss of function, but
  347.     a disorientation as users become accustomed to the new paradigm.
  348.  
  349.     If you need a glyph that you know is in your PFB file but that
  350.     isn't in the active code page (and if you can't change code pages
  351.     within your application), you can't get at it in OS/2 without
  352.     tampering with the font files. To tamper, you can use font
  353.     manipulation tools to redesignate the PFB file as FontSpecific
  354.     ("Symbol" character set to Fontographer). If you then map the
  355.     glyphs you need into one of the lower 256 cells (with some
  356.     limitations), they will be accessible in all environments. The
  357.     Fontographer manual does not explain what the "Symbol" character
  358.     encoding label really does, it just tells you not to use it except
  359.     for real symbol fonts. In fact you should use it for any font that
  360.     will not correspond in inventory to the code page supported by your
  361.     application, which means any non-Latin fonts.
  362.  
  363.     You do not have to recode all your fonts, and you wouldn't normally
  364.     want to do so, since Fontographer hinting is not nearly as good as
  365.     Adobe's own hand-tuning and regenerating a font regenerates the
  366.     hints. All you have to do is make sure you have one FontSpecific
  367.     type font installed that includes your typographic quotes, etc. for
  368.     each typeface you need. Within DeScribe, you can then write a macro
  369.     that will let you switch fonts, fetch a character, and switch back,
  370.     thereby allowing you to augment any group of fonts with a single,
  371.     shared set of typographic quotes (or whatever) that you put in a
  372.     single FontSpecific font. Alternatively, OS/2 also supports CP
  373.     1004, which does contain typographic quotes and other characters
  374.     used for high-quality typography, but the user may not be able to
  375.     convince an application to invoke this code page if it was not
  376.     designed to do so.
  377.  
  378.     You can have any number of FontSpecific fonts installed, which
  379.     means that there is a mechanism for dealing with unsupported
  380.     character sets (code pages).
  381.  
  382.     You can also tinker with the font files to try to trick the
  383.     operating system. For example, using Fontographer or other
  384.     utilities, you can change the name assigned to a glyph description
  385.     within the PFB file. If you want to use AdobeStandardEncoding and
  386.     you want to see a specific glyph at a specific cell when DeScribe
  387.     thinks it's using CP 850, you have to make sure that the name
  388.     assigned to the description of that glyph is what DeScribe expects
  389.     to find. OS/2 doesn't care whether, say, <o+diaeresis> really looks
  390.     like <o> with two dots over it, as long as it bears the right name.
  391.  
  392.     This second approach is obviously far more complex and provides
  393.     much more opportunity for error. Its advantage is that OS/2 does
  394.     not support case conversion and sorting (other than in machine
  395.     order) for unsupported code pages, since these operations depend on
  396.     character names. Keeping supported names from supported code pages
  397.     while changing the artwork is one way to maintain order and case
  398.     correspondences while increasing the range of glyphs actually
  399.     supported. I have not experimented with this approach, since the
  400.     use I would get out of the adding functionality (over the
  401.     FontSpecific encoding approach) is not worth the amount of effort
  402.     required.
  403.  
  404. Subject: 4.13. OS/2 2.1 and beyond 
  405.  
  406.     OS/2 2.1 will change some aspects of font handling. First, OS/2 2.0
  407.     GA+SP has a bug that can cause OS/2 to crash when an AFM file with
  408.     more than 512 kern pairs is read. This is fixed in 2.1. (This bug
  409.     is separate from a design limitation in MicroSoft Windows that
  410.     causes large kern tables to be read incorrectly. This problem is
  411.     still under investigation; watch this space for a report.)
  412.  
  413.     Fonts in 2.1 will be installed by default into the "\psfonts"
  414.     directory, so that they will normally be shared with Win-OS/2
  415.     fonts. (The user will still be able to specify a directory; all
  416.     that will change is the default). The user will also be able to
  417.     instruct the Font Palette not to delete font files when fonts are
  418.     uninstalled, so as to avoid clobbering a Win-OS/2 font by removing
  419.     it from native OS/2 use through the Font Palette (although the
  420.     default will still be to delete the physical font files).
  421.  
  422.     OS/2 will stop using AFM files and will replace these with OFM
  423.     files, a binary metrics file (different from PFM) that OS/2 will
  424.     compile from the AFM file during font installation. This will speed
  425.     font loading, since the system will not have to parse a plain text
  426.     metrics file. Additionally, the OS/2 PostScript printer driver used
  427.     to install its own, large font files, but will now use the OFM and
  428.     PFB files, thereby saving 50k-200k of disk space per installed font
  429.     outline.
  430.  
  431.     IBM's long-term goal is to replace the 383-entity inventory of
  432.     supported glyphs with Unicode. This is very much a long-term goal
  433.     and there is not even a hint of when it might become available. It
  434.     has its own problems, stemming from the fact that Unicode is
  435.     essentially a character standard and glyph and character
  436.     inventories may differ is assorted ways, but it will be a
  437.     significant step in the proverbial right direction.
  438.  
  439.  
  440.  
  441.